#if !defined(ximera_graphics_ientity_hpp)
#define ximera_graphics_ientity_hpp

// -----------------------------------------------------------

#include <ximera/graphics/attachable.hpp>
#include <ximera/graphics/icamera.hpp>
#include <ximera/common/sharedptr.hpp>

namespace ximera { namespace graphics
{
    class XIMERA_API IEntity : public Attachable
    {
    public:
        IEntity(String const& name = L"")
            : Attachable(name) {}

        virtual ~IEntity();        

        virtual bool visible() const = 0;
        virtual void visible(bool vis) = 0;

        virtual String materialName() const = 0;
        virtual void materialName(String const& name) = 0;

        virtual void descendantMaterial(String const& name, String const& material) = 0;

        virtual bool castShadows() const = 0;
        virtual void castShadows(bool casts) = 0;

        virtual void enableAnimation(String const& name, bool enable = true) = 0;
        virtual void step(String const& animName, Real secs) = 0;
        virtual void step(Real secs) = 0;

        virtual void attach(String const& boneName, Attachable* object) = 0;

        virtual void useCameraRenderMode(bool value) = 0;
    };

    typedef SharedPtr<IEntity> IEntityPtr;
}}

// -----------------------------------------------------------

#endif
